//给自己写的备注：
//1、SX1262和SX1278的引脚定义不同，SX1262包括中断引脚LORA_BUSY，SX1278没有；
//2、SX1262的中断引脚为DIO1，SX1278的中断引脚为DIO0；
//3、SX1262的初始化方式不同.
//4、SX1262的接收方式不同.

#include <RadioLib.h>
#include <Arduino.h>
// 预处理指令集中管理配置
// 公共部分
#define LORA_SCK   10
#define LORA_MISO  6
#define LORA_MOSI  7
#define LORA_NSS   8
#define LORA_RST   5    
#if defined(USE_SX1262)
//SX1262 配置
#define LORA_BUSY  4  
#define LORA_DIO1  3
//创建SX1262专用模块对象
Module loraModule(LORA_NSS, LORA_DIO1, LORA_RST, LORA_BUSY);
SX1262 radio = SX1262(&loraModule);

#elif defined(USE_SX1278)
//SX1278 配置
#define LORA_DIO0 3
// 创建SX1278专用模块对象
Module loraModule(LORA_NSS, LORA_DIO0, LORA_RST);
SX1278 radio = SX1278(&loraModule);

#endif

// 公共配置参数
const float FREQ = 470.0;   // 优先使用低频段
const int SF = 12;          // 保持最大扩频因子
const float BW = 41.7;      // 最小可用带宽（最大化灵敏度）
const int CR = 8;           // 最高冗余编码
const int PWR = 17;         // 法规允许最大功率

// 发送计数器
int sendCounter = 0;        // 用于递增的数字

void setup() {
  Serial.begin(115200);
  delay(1000);

/************** SPI初始化 **************/
  #if defined(USE_SX1262)
    SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_NSS); // SX1262需要显式指定SPI引脚
  #elif defined(USE_SX1278)
    SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_NSS); // SX1278需要NSS引脚
  #endif
  
  //芯片初始化
  int state = radio.begin(FREQ); // 频率（根据地区设置，如中国470-510MHz）
  
  if (state == RADIOLIB_ERR_NONE) {
    Serial.println("LoRa 初始化成功！");
  } else {
    Serial.print("初始化失败，错误代码：");
    Serial.println(state);
    while (true); // 卡死
  }

/************** 公共参数配置 **************/
  radio.setSpreadingFactor(SF);
  radio.setBandwidth(BW);
  radio.setCodingRate(CR);
  radio.setOutputPower(PWR);
}

void loop() {
  // 发送递增数字
  String data = String(sendCounter); // 转换为字符串
  int state = radio.transmit(data);
  
  if (state == RADIOLIB_ERR_NONE) {
    Serial.print("发送成功！序号: ");
    Serial.println(sendCounter);
    sendCounter++; // 数字递增
  } else {
    Serial.print("发送失败，错误代码：");
    Serial.println(state);
  }

  delay(1000); // 改为每秒发送一次
}